home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Die Speccy' 97
/
Die Speccy' 97.iso
/
amiga_system
/
the_aminet
/
util
/
moni
/
msfu_v11.lha
/
MSFU
/
src
/
MSFU.e
< prev
next >
Wrap
Text File
|
1995-09-09
|
5KB
|
173 lines
OPT OSVERSION = 37
OPT PREPROCESS
->/////////////////////////////////////////////////////////////////////////////
->/////////////////////////////////////////////////////// #define ... ... /////
->/////////////////////////////////////////////////////////////////////////////
->#define DEBUG
->/////////////////////////////////////////////////////////////////////////////
->//////////////////////////////////////////////////////////// MODULE ... /////
->/////////////////////////////////////////////////////////////////////////////
MODULE 'dos/dos'
MODULE 'exec/ports' , 'exec/io' , 'devices/timer'
MODULE '*Trace'
#ifdef DEBUG
MODULE 'tools/exceptions'
#endif
->/////////////////////////////////////////////////////////////////////////////
->//////////////////////////////////////////////// RAISE ... IF ... = ... /////
->/////////////////////////////////////////////////////////////////////////////
RAISE "ARGS" IF ReadArgs() = NIL ,
"PORT" IF CreateMsgPort() = NIL ,
"TIME" IF CreateIORequest() = NIL ,
"DEV" IF OpenDevice() <> NIL
->/////////////////////////////////////////////////////////////////////////////
->/////////////////////////////////////////////////////// CONST ... = ... /////
->/////////////////////////////////////////////////////////////////////////////
ENUM ARG_TRACEFILE ,
ARG_LIBS , ARG_DEVS , ARG_ALL ,
ARG_FIRSTDELAY , ARG_DELAY ,
ARG_BEEP , ARG_REQUESTER ,
NUMBER_ARGS
ENUM QUIT , YES , NO , MAX_ANSWER
#ifdef DEBUG
CONST TIMEUNIT = 1 -> second
#endif
#ifndef DEBUG
CONST TIMEUNIT = 60 -> minute
#endif
->/////////////////////////////////////////////////////////////////////////////
->///////////////////////////////////////////////////////// DEF ... : ... /////
->/////////////////////////////////////////////////////////////////////////////
DEF timer_mp : PTR TO mp
DEF timer_req : PTR TO timerequest
->/////////////////////////////////////////////////////////////////////////////
->///////////////////////////////////////////////////////////// PROC main /////
->/////////////////////////////////////////////////////////////////////////////
PROC main() HANDLE
DEF rdargs = NIL , args : PTR TO LONG
DEF tr : PTR TO trace
DEF first = TRUE , delay
PrintF( ' \c1;33;40\cMSFU\c0;31;40\c v1.1\n' , $9B , $6D , $9B , $6D )
PutStr( 'Copyright ⌐ 1995, Lionel Vintenat\n' )
PrintF( '\c1;32;40\c---------------------------------\c0;31;40\c\n' , $9B , $6D , $9B , $6D )
rdargs := ReadArgs( 'TF=TRACEFILE,LIBS/S,DEVS/S,ALL/S,FD=FIRSTDELAY/N,DELAY/N,BEEP/S,REQUESTER/S' ,
NEW args[ NUMBER_ARGS ] , NIL )
NEW tr.create( args[ ARG_TRACEFILE ] )
tr.load()
IF ( args[ ARG_LIBS ] OR args[ ARG_DEVS ] OR args[ ARG_ALL ] )
OpenDevice( TIMERNAME , UNIT_VBLANK ,
timer_req := CreateIORequest( timer_mp := CreateMsgPort() , SIZEOF timerequest ) , 0 )
delay := TIMEUNIT * ( IF args[ ARG_FIRSTDELAY ] THEN Long( args[ ARG_FIRSTDELAY ] ) ELSE 10 )
LOOP
timer_delay( delay )
IF args[ ARG_BEEP ]
DisplayBeep( NIL )
Delay( 50 )
ENDIF
SELECT MAX_ANSWER OF ( IF args[ ARG_REQUESTER ] THEN request() ELSE YES )
CASE YES
tr.update( args[ ARG_LIBS ] OR args[ ARG_ALL ] , args[ ARG_DEVS ] OR args[ ARG_ALL ] )
tr.save()
CASE QUIT
Raise( "^C" )
ENDSELECT
IF first
delay := IF args[ ARG_DELAY ] THEN Long( args[ ARG_DELAY ] ) ELSE 10
first:= FALSE
ENDIF
ENDLOOP
ELSE
tr.sort()
tr.print()
ENDIF
EXCEPT DO
SELECT exception
CASE "MEM"
PutStr( 'Out of memory !\n' )
CASE "ARGS"
PrintFault( IoErr() , 'Bad arguments ' )
CASE "PORT"
PutStr( 'Can''t create message port !\n' )
CASE "TIME"
PutStr( 'Can''t create timer request !\n' )
CASE "DEV"
PutStr( 'Can''t open timer device !\n' )
CASE "^C"
PutStr( '***user break***\n' )
ENDSELECT
IF timer_mp THEN DeleteMsgPort( timer_mp )
IF timer_req
IF timer_req.io.device THEN CloseDevice( timer_req )
DeleteIORequest( timer_req )
ENDIF
IF rdargs THEN FreeArgs( rdargs )
#ifdef DEBUG
report_exception()
#endif
ENDPROC
->/////////////////////////////////////////////////////////////////////////////
->//////////////////////////////////////////////////////// Version string /////
->/////////////////////////////////////////////////////////////////////////////
CHAR '$VER: MSFU 1.1 (9.9.95)'
->/////////////////////////////////////////////////////////////////////////////
->////////////////////////////////////////////////////////// PROC request /////
->/////////////////////////////////////////////////////////////////////////////
PROC request() IS EasyRequestArgs( NIL ,
[ 20 , 0 , 'MSFU is talking to you...' , 'Ready to save current state ?' , 'Yes|No|Quit' ] ,
0 , NIL )
->/////////////////////////////////////////////////////////////////////////////
->////////////////////////////////////////////////////// PROC timer_delay /////
->/////////////////////////////////////////////////////////////////////////////
PROC timer_delay( secs )
DEF sig
timer_req.time.secs := secs
timer_req.time.micro := 0
timer_req.io.command := TR_ADDREQUEST
SendIO( timer_req )
sig := Wait( Shl( 1 , timer_mp.sigbit ) OR SIGBREAKF_CTRL_C )
IF ( sig AND SIGBREAKF_CTRL_C )
AbortIO( timer_req )
WaitIO( timer_req )
Raise( "^C" )
ELSE
WaitIO( timer_req )
ENDIF
ENDPROC